import request from "@/utils/request"

/** 登录请求参数 */
export interface LoginRequestData {
  /** 用户名 */
  username: string
  /** 密码 */
  password: string
  /** 验证码缓存key */
  captchaKey: string
  /** 验证码 */
  captchaCode: string
}

/**
 * 用户信息
 */
export interface AuthInfo {
  /** 详细信息 */
  detail: {}
  /** 角色列表 */
  roles: string[]
  /** 权限列表 */
  perms: string[]

  state: number
  token: string
  username: string
}

/** 登录响应 */
export type LoginResponseData = ResponseData<AuthInfo>

/** 验证码响应 */
export type CaptchaResponseData = ResponseData<{
  /** 验证码缓存key */
  code_id: string
  /** 验证码图片Base64字符串 */
  image_url: string
}>

/** 返回认证信息响应 */
export type InfoResponseData = ResponseData<AuthInfo>

const AUTH_BASE_URL = "/api/auth"

class AuthAPI {
  /** 登录 接口*/
  static login(data: LoginRequestData) {
    const formData = new FormData()
    formData.append("username", data.username)
    formData.append("credential", data.password)
    formData.append("captcha_id", data.captchaKey)
    formData.append("captcha_code", data.captchaCode)
    return request<any, LoginResponseData>({
      url: `${AUTH_BASE_URL}/login`,
      method: "post",
      data: formData,
    })
  }

  /** 注销 接口*/
  static logout() {
    return request({
      url: `${AUTH_BASE_URL}/logout`,
      method: "delete",
    })
  }

  /** 获取验证码 接口*/
  static getCaptcha() {
    return request<any, CaptchaResponseData>({
      url: `${AUTH_BASE_URL}/code_image`,
      method: "get",
    })
  }

  /** 获取身份认证信息 接口*/
  static getInfo() {
    return request<any, InfoResponseData>({
      url: `${AUTH_BASE_URL}/info`,
      method: "get",
    })
  }
}

export default AuthAPI
